\section{Methods}
The entire CROSS framework is already implemented and required minor adjustments to work for our intended application. CROSS provides an API to allow an SDR application access to the logic of the CE. This API consists of two main functions: GetOptimalParameters and UpdateParameterPerformance. GetOptimalParameters takes in the current parameters and observables, then outputs parameters calculated in the CE. UpdateParameterPerformance takes in the current parameters, observables, and utilities and gives them to the CE to make relationships between parameters and utilities. The overall algorithm for cognition includes these two functions and the application calculation of current observables and utilities. Allowing the application, which is partially written by the user, to calculate the observables or utilities may add a significant amount of time to the cognition cycle, but it gives the user some flexibility in terms of design. 
\begin{verbatim}
Algorithm:

   1. Get Optimal Parameters
   2. Apply Parameter Changes
   3. Calculate Utilities and Observables
   4. Update Parameter Performance
   5. Repeat at 1

\end{verbatim}
The third step of this algorithm is the only part of the algorithm that the user needs to write. This is because the way in which an observable or utility is calculated can vary significantly between applications. For example, the user might want to take a significant amount of time to calculate an accurate bit error rate, or the user might be satisfied with the CE’s proposed solution even though the bit error rate is approximated. In order to complete steps 2 and 3, the application changes an XML file that adheres to the SDRPHY standard for describing a radio. Every cycle, our application reads from the XML file, changes the parameters and completely writes the XML file again. Then, our application reads these changes to the XML file and applies the changes to the waveform or flowgraph. The CE that was designed and implemented combines the quickness of a binary search algorithm and a database for case-based reasoning. The binary search algorithm merits two advantages: the algorithm is quick in finding the optimal solution in terms of computation time or number of cycles and the algorithm is readily generalizable to problems with more parameters. This same algorithm has the disadvantages of being able to solve only more simple problems in which a utility function has very few maxima and being much slower for problems with more than 5 or more parameters. A top-level view of what has been implemented can be seen in Figure 1 (put a reference here to figure 1). Of the many functionalities that the proposed system offers, only the modules within the blue background have been partially or fully implemented.

\begin{figure}[h]
	\centering	\includegraphics[width=9cm]{C:/Users/gvanhoy/Pictures/OurSystem.jpg}
	\caption{Our System}
	\label{fig:OurSystem}
\end{figure}